perm filename UCODEO.LIS[S1,ALS] blob sn#444128 filedate 1979-05-29 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	List of changes to Ucode.	Last update 14-may-79 ARR
C00017 00003	Current definition of Ucode.	Last update 14-may-79 ARR
C00027 ENDMK
C⊗;
List of changes to Ucode.	Last update 14-may-79 ARR
------------------------
copied May 29th last change May 17th by ARR
Updated 14-may-79 ARR to reflect meeting of 11-may-79
Updated 9-may-79 ARR  consistency with page 3 of UCODE.LIS
Updated 4-may-79 ARR  fixing mistakes incurred in while typing it.
------------------------
∂02-May-79  1256	ARR  	Report on Ucode meeting, 28-apr-79
To:   "#SOPA.LOG[DOC,S1]"
CC:   ARR  
Brief report of the meetings held on 27-apr-79 and 28-apr-79 to make changes to 
the Ucode Language.
This report written by ARR. All the information will be crosschecked before the
revised documents come out.

(A) CONCEPTUAL DESCRIPTION:
    ----------------------
	1. The data type implies an inherent, operation-oriented length (e.g.,
		single and double word arithmetic) The length parameter describes
		the storage length only. It was suppressed from non-load/store
		operations, and added to the load/store operations that didn't
		have it.
	2. Tools were added for procedures as parameters.
	3. Tools were added for importing/exporting procedures and variables.
	4. Tools were defined for operations on sets of any size.
	5. An equivalent of MST was added for sequential blocks of code, to soften
		the problem caused by the restriction that stack should be empty
		after a jump.
	6. Type conversion was generalized.
	7. LOC will give SOURCE statement counts, instead of Ucode counts.
	8. Instructions were added for the Exclusive OR operation.
	9. Other changes, mainly cosmetic.
	10. LCA does anything that LDC does.
	11. XJP was reconfigured.
	12. Tools were added for GOTO to other procedures.	(11-may-79)
	13. An SDEF (equivalent of MDEF for the stack) was added. (11-may-79)

(C) DETAILED DESCRIPTION:
    --------------------

1. NEW INSTRUCTIONS:
   ----------------
S	ADJ  dt off lenr	Adjust the size of set on top		T<-T
S	BGNB			Mark the stack for a Block of code	---
S	ENDB			Cancel the last stack mark		---
S	CVT  dt dt len		Convert to type dt			T<-T
S	CVT2 dt dt len		Convert to type dt the second element
					from top of the stack.		T-1<-T-1
S	DSP  len		Dispose from the heap. Address in T.	Pop
T	EXPP blkn name		Export a procedure entry point		---
T	EXPV mt blkn off len    Export a variable address		---
C	ICUP dt pop push	Indirect call to a user procedure	---
T	IMPP blkn name		Import a procedure entry point		---
T	IMPV mt blkn off len 	Import a variable address		---
M	INST dt off len		Indirect Nondestructive Store		swap;
								       (T)<-T-1;pop
M	LDP  level blkn name	Load the information about a procedure
					entry point			T<-@name
?	PLEX level		Pop the stack to a lower lexical level  ---
S	SDEF dtlist		Define the data types that go into the stack.
S	TYP2 dt			Change the stack flag of second from 
				top of stack to type dt (no bit change) T-1<-T-1
S	XOR  dt			Exclusive OR				T<-T-1 or T

2. SUPPRESSED INSTRUCTIONS:
   -----------------------
ORD, were replaced by TYP, TYO
CHR, FLO, FLT, TRC were replaced by CVT, CVO

3. ADD PARAMETERS:
   --------------
AND, CHKN, DIF, INN, INT, IOR, NOT, UNI: take a dt, which has one only valid value.
IXA dt len
LCA dt len value
LDC dt len value
MUS dt
ODD dt
RND dt dt
SGS dt
XJP dt c-label else-label lb ub

4. SUPPRESS PARAMETERS:
   -------------------
EQU, GEQ, GRT, IEQU, IGEQ, IGRT, ILEQ, ILES, INEQ, LEQ, LES, NEQ: No len. dt only.
RND dt dt	(result, operand)

5. OTHER CHANGES:
   -------------
	What was	  Became
	--------	  ------
   name BGN		  BGN  name
	MOV  len	  IMOV dt
	OPTN dt off	  OPTN name integer

	IND  dt off len	  ILOD dt off len
	STO  dt off len   ISTR dt off len

6. DATA TYPES:
   ----------
    It was agreed to have, besides the current ones, distinct data types for:
	+ single and double word integers
	+ single and double word nonnegative integers
	+ single and double word reals
	+ Entry point addresses.
    In sopa, we will use the next letters:
	A	Address
	B	Boolean
	C	Character
	E	Procedure passed as parameter
	I	Double word integer
	J	Single word integer 
	K	Double word non-negative integer
	L	Single word non-negative integer
	M	record
	N	Nil pointer
	P	Procedure
	R	Single-word real
	S	Set
	T	string 
	X	Double-word real
Current definition of Ucode.	Last update 14-may-79 ARR
---------------------------
copied May 29th last change May 17th by ARR
Updated 14-may-79 ARR to reflect meeting of 11-may-79
Updated 12-may-79 RB  to suppress proposal for type E in memory
Updated 9-may-79  ARR crosscheck with PN,ALS,RB,FC, and document (mail) from RLS.
---------------------------

SOPA DATA TYPES: (s: standard ucode data types)
---------------

s	A	Address
s	B	Boolean
s	C	Character
s	E	Procedure passed as parameter
	I	Double word integer
	J	Single word integer 
	K	Double word non-negative integer
	L	Single word non-negative integer
s	M	record, array
s	N	Nil pointer
s	P	Procedure
	Q	Double-word real
	R	Single-word real
s	S	Set

SYMBOLOGY:
---------

+  = added 
-  = deleted 
p  = parameters changed
n  = name changed
{} = parameter for SOPA only
[] = allowable data types for SOPA
*  = open for discussion (requires RLS approval of SDEF

UCODE INSTRUCTIONS:
------------------

	ABS <dtype>  [I,J,K,L,Q,R]

	ADD <dtype>  [I,J,K,L,Q,R]

+	ADJ <dtype> <offset> <resultig length>		(adjust size of a set)

p	AND <dtype>  [B]

p	BGN <name>   

+	BGNB 		(begin block)

	CHKF

	CHKH <opnd dtype> <highbound> [A,C,I,J,K,L,S]

	CHKL <opnd dtype> <lowbound> [A,C,I,J,K,L,S]

p	CHKN <opnd dtype>   [A]

	CHKT

-       (CHR)

<label>	CLAB <length>

	COMM <comment>

	CSP <res dtype> <proc name> <pop> <push>  [A,B,C,I,J,K,L,*M,P,Q,R,S]

	CUP <res dtype> <block no> <proc name> <pop> <push> {<flt pt>} 
               [A,B,C,I,J,K,L,*M,P,Q,R,S]

+	CVT <res dtype> <opnd dtype> <res length>    	(convert top of stack)
	    [I,J,K,L] ↔ [X,R]	  (FLT,TRC)
            [I] ↔ [J]
	    [K] ↔ [L]
	    [X] ↔ [R]
	    [I,J,K,L] → [C]	  (CHR)

+       CVT2 <res dtype> <opnd dtype> <res length>	(convert second on stack )
	    [I,J,K,L] ↔ [X,R]	  (FLT,TRC)
            [I] ↔ [J]
	    [K] ↔ [L]
	    [X] ↔ [R]
	    [I,J,K,L] → [C]	  (CHR)
          

	DEAD <mem type> <block no> <offset> <length>

	DEC <dtype> <value> [A,B,C,I,J,K,L,S]

	DEF <mem type> <length>

p	DIF <dtype> [S]

	DIV <dtype>   [I,J,K,L,Q,R]

	DMD <dtype> [I,J,K,L]

	DOA <mem type> <block no> <offset> <length>

+	DSP <length>   		 (dispose)

	DUP <dtype> [A,B,C,I,J,K,L,*M,Q,R,S]

	END <name>

+	ENDB			(end block)

<name> ENT <res dtype> <level> <block no> <pop> <push> { <proc name> <gen> <fltpt> }
        	[A,B,C,I,J,K,L,*M,P,Q,R,S]

p	EQU <opnd dtype> [A,B,C,I,J,K,L,*M,Q,R,S]

+	EXPP <block no> <name>        (export procedure)

+	EXPV <mem type> <block no> <offset> <length>    (export variable)
	    [A,B,C,I,J,K,L,Q,R,S]

	FJP <label> 

-	(FLO)

-	(FLT)

p	GEQ <opnd dtype>  [A,B,C,I,J,K,L,*M,Q,R,S]

p	GRT <opnd dtype>  [A,B,C,I,J,K,L,*M,Q,R]

+	ICUP <res dtype> <pop> <push>     	(call to proc passed as param)

p	IEQU <opnd dtype>  [A,B,C,I,J,K,L,M,Q,R,S]

p	IGEQ <opnd dtype>  [A,B,C,I,J,K,L,M,Q,R,S]

p	IGRT <opnd dtype>  [A,B,C,I,J,K,L,M,Q,R]

p	ILEQ <opnd dtype>  [A,B,C,I,J,K,L,M,Q,R,S]

p	ILES <opnd dtype>  [A,B,C,I,J,K,L,M,Q,R]

n	ILOD <dtype> <offset> <length>  (used to be IND) 
	  [A,B,C,I,J,K,L,*M,Q,R,S]

n	IMOV <dtype>   (used to be MOV) [A,B,C,I,J,K,L,M,Q,R,S]

+	IMPP <block no> <name>		  		(import procedure)

+	IMPV <mem type> <block no> <offset> <length>	(import variable)
	   [A,B,C,I,J,K,L,M,X,R,S]

 	INC <dtype> <value>    [A,B,C,I,J,K,L,S]

p	INEQ <opnd dtype> [A,B,C,I,J,K,L,M,Q,R,S]

p	INN <opnd dtype>  [I,J,K,L]

	INST <dtype> <offset> <length>   (indirect non-destructive store)
	  [A,B,C,I,J,K,L,*M,Q,R,S]

p	INT <dtype>  [S]

p	IOR <dtype>  [B]

n	ISTR <dtype> <offset> <length>   (used to be STO)
	  [A,B,C,I,J,K,L,*M,Q,R,S]

p	IXA <opnd dtype> <unit size> [I,J,K,L]

<label>	LAB <branch count>

p	LCA <opnd dtype> <value>  [M,S]

	LDA <mem type> <block no> <offset> <length>

p	LDC <opnd dtype> <value> 
	    [B,C,I,J,K,L,*M,N,Q,R,S]

+	LDP <level> <block no> <name>

p	LEQ <opnd dtype>  [A,B,C,I,J,K,L,*M,Q,R,S]

p	LES <opnd dtype> [A,B,C,I,J,K,L,*M,Q,R]

	LEX <level> <block no>

	LIVE <mem type> <block no> <offset> <length>

	LOC <statement number>

	LOD <dtype> <mem type> <block no> <offset> <length>
	    [A,B,C,E,I,J,K,L,*M,Q,R,S]

	MDEF <memtype> <length> <min> <max> <dtype list>

	MOD <dtype>   [I,J,K,L]

	MPY <dtype>   [I,J,K,L,Q,R]

	MST <level> {<params size> <regparm size>}

p	MUS <opnd dtype> [I,J,K,L]

	NEG <dtype>   [I,J,K,L,Q,R]

p	NEQ <opnd dtype> [A,B,C,I,J,K,L,*M,Q,R,S]

	NEW <length>

p	NOT <dtype>  [B]

	NSTR <dtype> <mem type> <block no> <offset> <length>
	  [A,B,C,I,J,K,L,*M,Q,R,S]

p	ODD <opnd dtype> [I,J,K,L]

-	(ORD)

p	OPTN <name> <integer>

      	PAR <dtype> <mem type> <block no> <offset> <length>
	  [A,B,C,E,I,J,K,L,*M,Q,R,S]

	PLOD <dtype> <mem type> <block no> <offset> <length>
	  [A,B,C,I,J,K,L,*M,Q,R,S]

+	PLEX <level>			(Pop to a lower lexical level)

	PSTR <dtype> <mem type> <block no> <offset> <length>
	  [A,B,C,E,I,J,K,L,*M,Q,R,S]

	RET 

p	RND <res dtype> <opnd dtype>
	  [I,J,K,L]  [R,X]

+	SDEF <dtype list>		(Define the data types allowed into the stack)

p	SGS <opnd dtype>  [I,J,K,L]

	SQR <dtype>   [I,J,K,L,Q,R]

	STP <name>

	STR <dtype> <mem type> <block no> <offset> <length>
	  [A,B,C,I,J,K,L,*M,Q,R,S]

	SUB <dtype>   [I,J,K,L,Q,R]

	SWP <top dtype> <scnd dtype>
            [A,B,C,I,J,K,L,*M,Q,R,S]  [A,B,C,I,J,K,L,*M,Q,R,S]
 
<name>  SYM <mem type> <block no> <offset> <length>

	TJP <label> 

-	(TRC)

-       (UNK 0 0 TON <trace>)

+	TYP <res dtype> <opnd dtype>
	    [I] ↔ [K]
	    [J] ↔ [L]
	    [B,C] → [J,L]  (ORD)
	    [I,J,K,L] ↔ [S]

+      	TYP2 <res dtype> <opnd dtype>		(change type of second on stack)
    	    [I] ↔ [K]
	    [J] ↔ [L]
            [B,C] → [J,L]  (ORD)
	    [I,J,K,L] ↔ [S]

	UJP <label>

p	UNI <dtype>  [S]

	UNK <pop> <push> comment field

p	XJP <opnd dtype> <case label> <else label> <lowbound> <highbound>

+	XOR <dtype> [B]